package com.briup.ch08;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;

/**
 * @Author briup-adam
 * @Date 2023/10/12 下午3:12
 * @Description
 **/

public class CollectionBasic {
    //接口类型的变量指向实现类的引用
    static Collection c = new ArrayList();

    public static void main(String[] args) {
        //List  list=new List();
//        获取集合中元素的个数
        System.out.println(c.size());//0
        //向集合添加元素
        c.add("海鹏");
        c.add("张锦");
        c.add(Integer.valueOf(1));
        //自动装箱  double  -》Double
        c.add(40.6);
        //是否包含元素
        System.out.println(c.contains("张锦"));//true
        System.out.println(c.contains(new String("海鹏")));//true

        //将集合转成数组
        Object[] array = c.toArray();
        //遍历数组
        for (Object o : array) {
            System.out.println(o);
            System.out.println(o.getClass());
        }
        //移除指定元素
        System.out.println(c.remove("海鹏"));
        //清空集合
        c.clear();
        //判断集合是否为空  集合元素个数是否为0
        System.out.println(c.isEmpty());
        System.out.println("------------------泛型方法测试-----------");
        Collection c1 = new ArrayList();
        c1.add("张美娜");
        c1.add("白璐");
        c1.add("王亚文");
        c1.add("智行月");
        c.add(c1);//放入一个元素
        System.out.println(c.size());
        System.out.println(c);
        c.addAll(c1);//放入4个元素
        System.out.println(c.size());
        System.out.println(c);
        //判断指定集合是否是当前集合的子集
        //匹配一个元素 匹配的是集合
        System.out.println(c.contains(c1));//true
        //匹配一个元素 匹配的是集合
        System.out.println(c.containsAll(c1)); //true
        System.out.println("c1 = " + c1);

        //保留相交的元素
        c.retainAll(c1);
        System.out.println(c);
        String [] strings=new String[c.size()];
        Object[] objects = c.toArray(strings);
        System.out.println(objects==strings);
        System.out.println("-----------------自定义类型的集合测试----------------------");
        Collection stus=new ArrayList();
        Student s1 = new Student("张美娜", 20);
        stus.add(s1);
        stus.add(new Student("白璐",20));
        stus.add(new Student("王亚文",20));
        stus.add(new Student("智行月",20));
        System.out.println(stus.contains(new Student("白璐",20)));//true
        System.out.println(stus.contains(s1));//true
        System.out.println("------------集合遍历通过数组-----------");
        Object[] array1 = stus.toArray();
        //普通for
        System.out.println("*********普通for遍历数组********");
        for (int i = 0; i < array1.length; i++) {
            System.out.println(array1[i]);
        }
        //增强for
        System.out.println("*********增强for遍历数组********");
        for (Object o : array1) {
            System.out.println(o);
        }
        //数组工具类打印
        System.out.println("*********数组工具类打印********");
        System.out.println(Arrays.toString(array1));
        System.out.println("------------集合遍历通过迭代器-----------");
        //获取集合的迭代器
        Iterator iterator = stus.iterator();
        //判断迭代器是否还有更多元素
        while (iterator.hasNext()){
             //获取下一个元素
            Object o = iterator.next();
            System.out.println(o);
        }
        System.out.println("------------集合遍历通过增强for-----------");
        for (Object o : stus) {
//            引用类型赋值传递地址值  引用传递
//            基本类型赋值传递值  值传递
            Student s= (Student) o;
            s.setName("现眼包");
            System.out.println(o);
        }
        System.out.println(stus);


    }

}
